package ar.com.age.distribuidora.service;

import java.util.Date;
import java.util.List;

import ar.com.age.distribuidora.dominio.FacturaCompra;
import ar.com.age.distribuidora.dominio.LoteDeCompra;
import ar.com.age.distribuidora.dominio.Pago;
import ar.com.age.distribuidora.dominio.PagoCheque;
import ar.com.age.distribuidora.dominio.PagoEfectivo;

public interface CompraService {

	void crearOEditarPagoCheque(PagoCheque pagoCheque);

	List<Pago> buscarTodosPagoCheque();

	void eliminarPagoCheque(PagoCheque pagoCheque);

	List<PagoCheque> buscarPagoCheque(String codigo, String estado, Date desde, Date hasta,
			String cheque);

	void crearOEditarPagoEfectivo(PagoEfectivo pagoEfectivo);

	List<Pago> buscarTodosPagoEfectivo();

	void eliminarPagoEfectivo(PagoEfectivo pagoEfectivo);

	void crearOEditarFacturaCompra(FacturaCompra facturaCompra);

	List<FacturaCompra> buscarTodosFacturaCompra();

	void eliminarFacturaCompra(FacturaCompra facturaCompra);

	List<FacturaCompra> buscarFacturaCompra(String estado, String codigo,
			String tipo, Date desde, Date hasta);

	Double retornarSaldoAdeudado(FacturaCompra facturaCompra);

	void agregarPagoEfectivoAFacturaCompra(FacturaCompra facturaCompra, PagoEfectivo pago);

	void agregarPagoChequeAFacturaCompra(FacturaCompra facturaCompra,
			PagoCheque pago);

	void agregarLoteDeCompraAFacturaCompra(FacturaCompra facturaCompra,
			LoteDeCompra lote);

	FacturaCompra retornarFacturaCompraConLotes(FacturaCompra factura);

	FacturaCompra retornarFacturaCompraConPagos(FacturaCompra factura);

	void actualizarTotal(FacturaCompra facturaCompra);

	List<PagoEfectivo> buscarPagoEfectivo(String codigo, String estado,
			Date desde, Date hasta);

	List<Pago> buscarDisponiblesPagoCheque();

	List<Pago> buscarDisponiblesPagoEfectivo();

	List<FacturaCompra> getFacturasInformes(String producto, String proveedor, Date desde,
			Date hasta);

	FacturaCompra getFacturaCompraConListas(FacturaCompra factura);

}
